//#include<stdio.h>
//#include<stdlib.h>
//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	FILE* pf = fopen("data.txt", "w");
//	if (pf == NULL) {
//		perror("fopen");
//		return 1;
//	}
//	struct S s = { "lisi",18,88.0f };
//	fprintf(pf, "%s %d %f", s.name,s.age,s.score);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct S s = { 0 };
//	FILE* pf = fopen("data.txt", "r");
//	if (pf == NULL) {
//		perror("fopen");
//		return 1;
//	}
//	fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));
//	//printf("%s %d %f", s.name, s.age, s.score);
//	fprintf(stdout, "%s %d %.1f", s.name, s.age, s.score);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	char arr[100] = { 0 };
//	struct S s = { "wangwu",23,66.6f };
//	//将s中的各个数据转换成字符串，存放在arr中
//	sprintf(arr, "%s %d %f", s.name, s.age, s.score);
//	//printf("%s", arr);
//
//	//临时变量
//	struct S tmp = { 0 };
//	//从字符串arr中提取格式化的数据，存放在tmp中
//	sscanf(arr, "%s %d %f", tmp.name, &(tmp.age), &(tmp.score));
//	printf("%s %d %f", tmp.name, tmp.age, tmp.score);
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct S s = { "cuihua",25,88.8f };
//	//以二进制的形式写到文件中
//
//	//打开文件
//	FILE* pf = fopen("test.txt", "wb");
//	if (pf == NULL) {
//		perror("fopen");
//		return 1;
//	}
//	//写文件
//	fwrite(&s, sizeof(s), 1, pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//struct S
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct S s = { "cuihua",25,88.8f };
//	//读取文件的二进制信息写到内存中
//
//	//打开文件
//	FILE* pf = fopen("test.txt", "wb");
//	if (pf == NULL) {
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	fread(&s, sizeof(s), 1, pf);
//	printf("%s %d %f", s.name, s.age, s.score);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL) {
//		perror("fopen");
//		return 1;
//	}
//	int ch = 0;
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//定位文件指针
//	//fseek(pf, 4, SEEK_SET);
//	//fseek(pf, 2, SEEK_CUR);
//	fseek(pf, -2, SEEK_END);
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//	//输出文件指针相较于文件的起始位置的偏移量
//	printf("%d\n", ftell(pf));
//
//	rewind(pf); //将文件指针重新定位到文件的起始位置
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//enum {
//	SIZE = 5
//};
//int main(void)
//{
//	double a[SIZE] = { 1,2,3,4,5 };
//	FILE* fp = fopen("test.bin", "wb");
//	fwrite(a, sizeof * a, SIZE, fp);
//	fclose(fp);
//
//	double b[SIZE];
//	fp = fopen("test.bin", "rb");
//	size_t ret = fread(b, sizeof * b, SIZE, fp);
//	if (ret == SIZE) {
//		for (int i = 0; i < SIZE; i++) {
//			printf("%lf ", b[i]);
//		}
//		printf("\n");
//	}
//	else {
//		if (feof(fp)) {
//			printf("读取到文件末尾\n");
//		}
//		else if (ferror(fp)) {
//			printf("读取文件错误\n");
//		}
//	}
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//int main(void)
//{
//	//打开文件
//	FILE* pfread = fopen("test1.txt", "r");
//	if (pfread == NULL) {
//		perror("fopen\n");
//		return 1;
//	}
//	FILE* pfwrite = fopen("test2.txt", "w");
//	if (pfwrite == NULL) {
//		perror("fopen\n");
//		fclose(pfread);
//		return 1;
//	}
//	int ch = 0;
//	while ((ch = fgetc(pfread)) != EOF) {
//		fputc(ch, pfwrite);
//	}
//
//	//关闭文件
//	fclose(pfread);
//	pfread = NULL;
//	fclose(pfwrite);
//	pfwrite = NULL;
//	return 0;
//}

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL) {
		perror("fopen\n");
		return 1;
	}
	int ch = 0;
	while ((ch = fgetc(pf)) != EOF) {
		printf("%c ", ch);
	}
	int ret = feof(pf);
	printf("%d\n", ret);
	ret = ferror(pf);
	printf("%d\n", ret);

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}